package com.springcloud.test;

import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.cloud.stream.messaging.Sink;

/**
 * @Desc 用于接收来自RabbitMQ消息的消费者SinkReceiver
 * @EnableBinding ，该注解用来指定一个或多个定义了@Input或@Output注解的接口，以此实现对消息通道（Channel）的绑定。
 * 我们通过@EnableBinding(Sink.class)绑定了Sink接口，该接口是Spring Cloud Stream中默认实现
 * 的对输入消息通道绑定的定义
 * ----------------
 * @CLASS_NAME: SinkReceiver
 * ----------------
 * @Author jovi
 * ----------------
 * @Date 2020-03-27 15:57
 */
@Slf4j
@EnableBinding({Sink.class})
public class SinkReceiver {

    /**
     * 该注解主要定义在方法上，作用是将被修饰的方法注册为消息中间件上数据流的事件监听器，注解中的属性值对应了监听的消息通道名。
     * 我们通过@StreamListener(Sink.INPUT)注解将receive方法注册为对input消息通道的监听处理器，
     * 所以当我们在RabbitMQ的控制页面中发布消息的时候，receive方法会做出对应的响应动作
     */
    @StreamListener(Sink.INPUT)
    public void receive(Object payload) {
        log.info("Received:" + payload);
    }

}
